對於許多 Linux 的使用者來說習慣的 Shell 應該是系統預設使用的 Bash (Bourne-Again Shell),CentOS 預設支援的 Shell 除了有 bash 之外還支援 sh (Bourne Shell)、csh (C Shell)、tcsh (TENEX C Shell)、ksh (Korn Shell) 等 Shell。基本上使用哪種 Shell 全憑個人使用習慣也就是順手即可。
使用 Bash Shell 在不設定任何參數的情況下,便可以擁有按下【Tab】鍵,即自動補齊檔名及搜尋上一次輸入指令的功能。所謂【Tab】鍵補齊檔名功能是什麼意思呢?舉個例子來說,假如我們想要查看主機的日期及時間資訊時,會鍵入 date 指令,當輸入 da 之後便按下【Tab】鍵,此時作業系統會尋找系統中 da 開頭的相關指令,由於系統中 da 開頭的指令只有二個分別是 date 及 dash。因此在輸入 t 變成 dat 之後按下【Tab】鍵進行補齊檔名功能時便會自動補齊為 date 指令。
除了預設的功能之外我們可以設定 Bash Shell 的環境變數來加強操作的便利性,以剛才測試補齊檔名功能執行的 date 指令來說,其實該指令的完整路徑為 /bin/date,但是為何當我們輸入 date 指令按下 Enter 鍵後便可順利執行該指令?這是因為預設的 Bash Shell 環境設定檔中已經將作業系統經常會使用到的指令路徑載入環境變數中(參數 PATH),因此我們才可以在不用鍵入絕對路徑的情況下直接執行相關指令。
----- 環境變數 (Environment Variables) -----
env: 查看目前 Shell 的環境變數
set: Dump 目前在 記憶體 中所有變數
export: 在目前 Shell 中重設環境變數 (離開該 Shell 後設定便消失)
#echo $LANG //顯示目前環境變數中語系
en_US.UTF-8
#export LANG=zh_TW.UTF-8 //改變目前 Shell 中語系的環境變數
#echo $LANG //再次顯示目前環境變數中語系
zh_TW.UTF-8
可利用下列參數來調整您的提示字元符號 (PS1) 及顯示的內容:
\W: 相對路徑 (最後一個資料夾)
\w: 絕對路徑
\t: 時間
\h: 主機名稱 (Host)
\u: 使用者名稱 (User Name)
\$: 一般使用者提示字元符號 $ 而超級使用者 Root 的提示字元符號則為 #
#echo $PS1 //顯示目前環境變數中提示字元設定
[\u@\h \W]\$
#export PS1="[\u@\h \t \W]\$" //將時間參數加入
[root@Centos6 10:04:16 ~]$
----- 別名 (Aliases) -----
別名 (Aliases) 的使用,我們可以輕易客製化自已想要的指令名稱達到想要達到的功能,如下透過 aliases 功能建立 see 指令而輸入此指令則等於 ls -l。
#alias //顯示目前別名設定
alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
也可以自行定義別名,如下操作自行定義 myls 別名:
#myls //執行 myls 指令
-bash: myls: command not found //目前的 Bash Sehll 不認識此指令
#alias myls='ls -lh' //建立別名 myls 指令內容等於執行 ls -lh
#alias myls //查看 alias
alias myls='ls -lh'
#myls //執行 myls 指令,結果跟執行 ls -lh 一樣
total 64K
-rw-------. 1 root root 1.5K Oct 7 09:35 anaconda-ks.cfg
-rw-r--r--. 1 root root 38K Oct 7 09:35 install.log
-rw-r--r--. 1 root root 9.7K Oct 7 09:34 install.log.syslog
----- Bash Shell 環境設定檔載入順序 -----
前面提到設定環境變數 (Environment Variables) 及別名 (Aliases) 當您設定完成後便可開始開心的使用您的設定,但只要離開該 Shell 則設定便會失效,那該如何保持這些設定呢? 答案為設定至系統該 Shell 的 profile 及 aliases 檔案中。
下列 Login Bash Shell 為 Bash Shell 預設登入時讀取 Profile 及 Aliases 檔案的順序: (可以在下列檔案中加上 echo 內容,然後重新登入證是否真的如下所述依序載入)
/etc/profile: 系統環境變數
/etc/profile.d/*.sh
~/.bash_profile: 使用者個人變數
~/.bashrc: 使用者個人 Aliases
/etc/bashrc: 系統環境 Aliases
若是 Non-login Shell 則僅會讀取 Aliases 檔案 (例如切換 Shell 環境):
~/.bashrc: 個人 Aliases
/etc/bashrc: 系統 Aliases
當使用者個人變數與系統環境變數有衝突時以哪個結果為準? 答案是以最後載入的是哪個檔案或變數即以最後結果為準,若修改上述 Profile 及 Aliases 檔案內容後希望變更馬上生效時可利用上一章教到的指令 (source or .)
#. /etc/bashrc
#source /etc/bashrc
----- 跳脫字元 (Preventing Expansion) -----
跳脫字元 (\) 可以有效防止某些指令擴大執行,或者說跳脫該功能例如我們想要顯示錢號 ($) 就必須使用跳脫字元。
#echo "iPad2 is $499 USD" //未加跳脫字元時系統會認為是錯誤變數名稱 $4
iPad2 is 99 USD
#echo "iPad2 is \$499 USD" //加上跳脫字元後即可正確顯示
iPad2 is $499 USD
----- 快速置換上一行指令字元 -----
有時我們想要打的指令很類似時我們可以利用 ^ 符號來達成快速置換上一行指令字元的目的,如下我們將停止 cups 服務的 stop 二個字元 op 快速置換為 art 就變成了 start 了。
#service cups stop //停止 cups 服務
Stopping cups: [ OK ]
#^op^art //將 op 置換為 art 即變成 start
service cups start
Starting cups: [ OK ]
(上一篇)邁向 RHCE 之路 (Day06) - 萬用字元、History 指令、Shell 基本概念
(下一篇)邁向 RHCE 之路 (Day08) - 標準輸入及輸出、管線邁向 RHCE 之路系列文章連結